<?php
namespace Common\Model;

/**
 * 交易Model
 */
class TradeModel {

	/**
	 * 根据订单号执行退款操作
	 * order_no 系统里对应的商户订单号  
	 * @return [type] [description]
	 */
	public static function refund($order_no){ 
		// 载入微信支付类库 
		loadWxH5PayClass();   
		// 获取订单信息 
		$map['order_no'] 	= $order_no ; 
        $OrderInfo 			= M('order')->where($map)->find();  
        if(!$OrderInfo){
            return array('status'=>0,'info'=>'订单数据不存在'); 
        }else if( $OrderInfo['refund_status'] != 2 ){
            return array('status'=>0,'info'=>'订单状态不允许退款');  
        } 
        $out_trade_no = $order_no ;
		$total_fee    = $OrderInfo["money"]*100;
		$refund_fee   = $OrderInfo["money"]*100;
		$input 		  = new \WxPayRefund();
		$input->SetOut_trade_no($out_trade_no);
		$input->SetTotal_fee($total_fee);
		$input->SetRefund_fee($refund_fee);
	    $input->SetOut_refund_no(\WxPayConfig::$MCHID.date("YmdHis"));
	    $input->SetOp_user_id(\WxPayConfig::$MCHID); 
	    $res = \WxPayApi::refund($input);  
	    file_put_contents('./refund_rec.txt',$OrderInfo['order_no'].'---'.$OrderInfo['username'].'---'.date('Y-m-d H:i:s'),FILE_APPEND) ;
		file_put_contents('./refund_rec.txt', "\r\n",FILE_APPEND) ;
	    // 微信返回结果保存cache  
	    M('order')->where(array('id'=>$OrderInfo['id']) )->save(array('refund_cache'=>serialize($res)));
	    if ( $res['result_code'] == 'SUCCESS' && $res['return_code'] == 'SUCCESS') { 
	    	// 标识原来的timeID 为可预约状态
	    	M('times')->where(array('id'=>$OrderInfo['timeid']) )->save(array('is_ordered'=>0) );
	    	file_put_contents('./ref.txt', M()->getlastsql(),FILE_APPEND) ;
	    	file_put_contents('./ref.txt', "\r\n",FILE_APPEND) ;
	    	return array('status'=>1,'info'=>'退款成功','data'=>$res);  
	    }else{
	    	if($res['err_code'] == 'ERROR'){
	    		M('order')->where(array('id'=>$OrderInfo['id']) )->save(array('refund_status'=>-2) );
	    	}
	    	return array('status'=>0,'info'=>'退款失败 请联系管理员','data'=>$res);  
	    } 
	}
}